#include <iostream>
#include <set>
#include <vector>

using namespace std;

set<int> theSet;

vector<int> stov(string s) //string to vector  --AND--  fill theSet
{
    vector<int> v;
    for (int i = 0; i < s.length(); ++i)
    {
        v.push_back(s[i] - 48);
        if (theSet.find(s[i] - 48) == theSet.end())
        {
            theSet.insert(s[i] - 48);
        }
    }
    return v;
}

vector<int> doubling(vector<int> sv) //doubling the string
{
    int t = 0;
    vector<int> ans;
    for (auto i = sv.rbegin(); i != sv.rend(); ++i)
    {
        int n = (*i) * 2 + t;
        if (n >= 10)
        {
            t = n / 10;
            ans.push_back(n % 10);
        }
        else
        {
            t = 0;
            ans.push_back(n);
        }
    }
    if (t == 1)
    {
        ans.push_back(t);
    }
    return ans;
}

void judgeAndPrint(vector<int> sv) //judge the doubling number is qualified or not --AND-- print
{
    vector<int> ans;
    ans = doubling(sv);
    for (auto i = ans.begin(); i != ans.end(); ++i)
    {
        if (theSet.count(*i) == 0)
        {
            cout << "No" << '\n';
            for (auto it = ans.rbegin(); it != ans.rend(); ++it)
            {
                cout << *it;
            }
            return;
        }
    }
    cout << "Yes" << '\n';
    for (auto it = ans.rbegin(); it != ans.rend(); ++it)
    {
        cout << *it;
    }
    return;
}

int main()
{
    string s;
    cin >> s;

    vector<int> sv;
    sv = stov(s);

    judgeAndPrint(sv);
    return 0;
}